/* 
 * ===上下/左右滑动，用于“调节视频进度、音量、亮度”
 * @ 参考文档 [uni-app 如何判断/获取 左滑右滑上滑下滑 等手势事件]
 * @ 文档地址：https://ask.dcloud.net.cn/article/38074
 * 
 * ===手指按下并且没有移动又是长按，用于“调节长按视频快进”
 * @ 参考文档 [vue 手指长按触发事件]
 * @ 文档地址：https://blog.csdn.net/weixin_30788731/article/details/96962936
 * 此版本为1.8.0版本，手指调节功能已经无bug
 * 
 * ===滑动操作
 * @ 参考文档地址：https://www.cnblogs.com/yushihao/p/15223681.html
 * @ 优化思路：我们可以在添加手指滑动的时间和滑动的距离来加强手指滑动的操作
 * 
 * ==touch.js里多余重复代码，后期统一封装调用，目前先保证正常使用即可。
 */

import throttle from '../../../function/throttle.js'

// 手指事件
var timer;//定时器状态[监听手指触摸]用来防抖
var onTouchTimeout;
export default {
	data() {
		return {
			//
			clickTiem: 0, //手指触摸和离开的时间统计
			Touchstart_time: 0,//手指触摸开始时间
			Touchend_time: 0,//手指触摸离开时间
			clickCi: 0, //手指快速触摸和快速离开的次数(点击)
			
			// 触摸事件用到的(触摸开始)
			oldTouces: {
				pageX: 0,//手指按下的坐标
				pageY: 0,//手指按下的坐标
			},
			// 触摸事件用到的 (触摸开始)
			oldValue: {
				currentTime: 0,//手指按下时记录当前时长（播放的当前进度时间，整数型）
				YingLiangValue: 0,//手指按下时记录系统当前音量值
				LiangduValue: 0,//手指按下时记录系统当前亮度值
			},
			// 触摸事件用到的(触摸移动)
			NewTouces: {
				pageX: 0,//手指移动的坐标
				pageY: 0,//手指移动的坐标
			},
			// 触摸事件用到的(触摸移动)
			newTouchCurrentTime: 0,//手指按下并左右移动时，实时计算滑动的距离等于多少视频时长
			newTouchYingliangValue: 0,//手指按下并左右移动时，实时计算当前滑动的音量值是多少
			newTouchLiangduValue: 0,//手指按下并左右移动时，实时计算当前滑动的亮度值是多少
			
			/* 3.5.1版本 新增优化
			 * 老版本 moveX 没有记录，而是当偏移大于20时，就计算是不对的，因为包含了条件未成立时的距离，计算有误差
			 * 新版本做了优化。先减掉X轴的偏移moveX距离，因为不减去，会吧这个moveX也算进去，那么当刚进入视频进度调节手势时，显示的预览时间也是不对的，因为多了moveX距离的计算
			 * moveY，用法和上面类似。
			 */
			
			moveX: 0,// 用于记录手指触摸开始到进入手指类型为滑动视频调节时的X轴偏移距离存储
			moveY: 0,// 用于记录手指触摸开始到进入音量/亮度调节手势时的Y轴偏移距离存储

			zuoyou_Width: 0,//左边和右边的宽度范围(用于音量和亮度调节)
			contorl_Bottom:0,//控制面板bottom不可被触摸的距离(只在show=true时，下面不可被触摸)
			
			TouchMoveType:null,//手指滑动的类型[进度条?音量?亮度?视频快进?不可以执行触摸事件?]
			
			DataY:0,//纵坐标上下移动的时候参数,用于改变音量,音量不能滑动时候同步调节，会卡顿，HX的bug
			DataX:0,//横坐标左右移动的时候参数,用于改变视频进度
			TouchMove_isJindu:false,//是否可以更新视频进度
			TouchMove_zuoyouX:false,//手指触摸左边和右边时(音量亮度)并且是左右移动,可以更新视频进度，否则上下移动不可更新视频进度
			flag:true,//设置定时器的句柄，用来节流
			isfangdou:true,//用来防抖
			
			// 用于判断(手指没移动前)是否是长按，如果是则设置调节“长按视频快进”
			timeOutEvent:0,//定时器
			// 测试时(目前先弃用)>>获取用户设置的倍数索引(用于如果是长按调节视频快进，则手指离开时，需要恢复到用户设置的倍速)
			UserBeiSu:1.0, 
			// 主要作用是修复如果跳过片头时间>=1,则设置下方参数=1，然后用于用户第一次向右拖动的时候，移动开始的时间必须和进度时间一致开始算起，而不是从0秒开始算
			SkipToCurrTimeCi: 0,//用来拦截的（修复bug：当向左回拖进度时候，我手指没松开没移动了，等500毫秒左右又会同步视频当前时间的bug）
			// 用于在长按快进事件执行之前，记录用户设置的倍数为？x倍数，当长按快进结束后，再恢复用户设置的倍数
			upper_besuIndex: null,// 记录用户设置的倍数索引（长按快进事件执行前开始记录）
			upper_besuText: '',// 记录用户设置的倍数文字
		}
	},
	watch:{
		
	},
	methods:{
		//@touchstart 触摸开始(没有移动前执行)
		async onTouchStart(event) {
			//console.log("触摸开始")

			// isopenDrawerItem = true 已禁用【手指触摸事件】
			// 判断抽屉面板下的Item面板是否是开启状态，是的话，就要禁用手指触摸事件
			if (this.isopenDrawerItem == true) return false // 直接返回，阻止事件本身

			// 获取系统音量的值，写入音量进度条
			await this.getDeviceVolume()
			// 储存当前获取的系统音量值
			this.oldValue.YingLiangValue = this.SliderYingliangValue
			// 获取系统亮度的值，写入亮度进度条
			await this.getScreenLiangdu()
			// 储存当前获取的系统亮度值
			this.oldValue.LiangduValue = this.SliderLiangduValue
			// 获取video的当前时长（视频的当前进度时间）
			this.getVideoCurrentTime()		
			// 手指按下时的X坐标和Y坐标
			this.oldTouces = event.changedTouches[0]
			
			// 开启防抖
			//this.isfangdou = true
			// 重置触摸手势
			this.TouchMoveType = null
			// 重置触摸时显示的面板为假，只有触摸移动时才显示对应的
			this.isTouchFull = false
			this.isTouchFull_Liangdu = false
			this.isTouchFull_Yingliang = false
			this.ischangingSliderTime = false
			// 关闭对应的控制面板(已经迁移至长按调节视频快进事件里)
			
			// 计算左右的触摸距离 = 屏幕的一半（左边距离用于亮度，右边距离用于音量）
			if (this.isFullScreenChange==true){
				// 进入全屏时
				this.zuoyou_Width = Number(this.FullscreenWidth/2)
			}else {
				// 退出全屏时
				this.zuoyou_Width = Number(this.FullscreenHeight/2)
			}
			
			// 判断手指按下是否满足60毫秒，不满足就触摸移动了或者触摸结束，就清除定时器事件
			//this.onTouchtime(60) //用于解决灵感度太高，手快速触摸移动，偏移值大，然后亮度、音量、视频进度的值一下子加的很多。

			// 判断是否设置“调节长按视频快进”
			// 如果手指按下并且没有移动在500毫秒内又是长按，则设置“调节长按视频快进”
			this.gTouchStartSetVideoPlaybackRate()
			
			
			// 将触摸开始回调出去
			let parms = {
				type: 'touchstart',
				event,// 触摸参数
				msg: {
					type: 'touchstart == 触摸开始',
					event: '触摸参数'
				}
			}
			this.$emit('changeTouch',parms)
			
		},
		//@touchmove触摸移动(开始移动后执行)
		onTouchMove(event) {
			//console.log("触摸移动")
			//console.log(event)
			
			// 3.5.1 版本新增 2022-0316
			// 在锁屏模式下是否开启手指触摸手势（即是否开启控制进度、亮度、音量的调节手势）
			// false = 锁屏模式下关闭了控制调节手势 || true = 锁屏模式下开启了控制调节手势
			//if (this.Config.goSuoPing_touch_gesture == false) return false

			// 3.5.1 版本新增 2022-0316
			// 在锁屏模式下是否开启手指触摸手势（即是否开启控制进度、亮度、音量的调节手势）
			// 如果是关闭了控制调节手势，则返回，不继续向下执行
			if (this.is_goSuoPing_touch_gesture()) return false

			// isopenDrawerItem = true 已禁用【手指触摸事件】
			// 判断抽屉面板下的Item面板是否是开启状态，是的话，就要禁用手指触摸事件
			if (this.isopenDrawerItem == true) return false // 直接返回，阻止事件本身

			// isopenDrawerItem = true 已禁用【手指触摸移动事件】
			// 判断音频播放是否开启，如果音频开启，也不能触摸移动，只能触发触摸开始和触摸结束。
			if (this.createAudio == true) return false // 直接返回，阻止事件本身

			// // 先清除定时器
			// clearTimeout(onTouchTimeout)
			// // 再判断Touchend_time是否等于100，是100，则说明手指按下到移动时，满足了100毫秒。
			// console.log('Touchend_time == ' + this.Touchend_time)
			// if (this.Touchend_time != 60) return false 


			// 手指触摸开始时的坐标
			let oldTouces = this.oldTouces
			// 手指触摸移动时的坐标
			let newTouces = event.changedTouches[0]
			// 记录手指触摸移动时的坐标
			this.NewTouces = newTouces
			// 左右滑动时的距离 [用于视频进度控制]
			var dataX = newTouces.pageX - oldTouces.pageX
			// 上下滑动时的距离 [用于音量和亮度控制]
			var dataY = newTouces.pageY - oldTouces.pageY
			// 记录Y轴的滑动距离，如果手指只是点击后离开，就是0，不执行更新音量和亮度。用于手指触摸结束判断
			this.DataY = dataY
			// 执行防抖
			//this.fangdou()
				
			//console.log('上下滑动时的距离 dataY == ' + dataY)
			//console.log('左右滑动时的距离 dataX == ' + dataX)
				
				
			// 2021-1127-更新此处代码 
			/* 1. 修复 安卓端 华为和荣耀 点击视频画面时，不会显示和隐藏控制面板的bug
				2. 修复 安卓端 华为和荣耀 长按视频 无法触发 长按快进 的功能 
				*/
			
			// 如果手指有移动说明有手指类型，并且手指类型不等于 长按快进，则取消定时器事件
			if (this.TouchMoveType && this.TouchMoveType!='VideoPlaybackRate'){
				// 如果手指有移动，则取消所有事件，此时说明用户只是要移动而不是长按
				this.gTouchMoveCancelVideoPlaybackRate()
			}
				

			// 手势类型
			if (!this.TouchMoveType){
				// 进度条控制 (如果手指左右滑动大于20则设置为“调节视频进度”)
				this.TouchMoveType = Math.abs( newTouces.pageX - oldTouces.pageX ) > 20 ? 'conterVideoJinDu' : null
				// 左边/亮度控制 (如果手指上下滑动并且X“横”坐标小于或等于this.zuoyou_Width时,则设置为“调节亮度”)
				this.TouchMoveType = Math.abs( newTouces.pageY - oldTouces.pageY ) > 20 && newTouces.pageX <= this.zuoyou_Width ? 'leftLiangDu' : this.TouchMoveType
				// 右边/音量控制 (如果手指上下滑动并且X“横”坐标大于this.zuoyou_Width时,则设置为“调节音量”)
				this.TouchMoveType = Math.abs( newTouces.pageY - oldTouces.pageY ) > 20 && newTouces.pageX > this.zuoyou_Width ? 'rightYingLiang' : this.TouchMoveType
				// 已有手指类型
				if (this.TouchMoveType){
					// 开启触摸时显示的面板
					this.isTouchFull = true
					// 计算X轴的距离
					console.log('已有手指类型')
					console.log(Math.abs( newTouces.pageX - oldTouces.pageX ))
					// 存入moveX （X轴的偏移距离）
					this.moveX = Math.abs( newTouces.pageX - oldTouces.pageX )
					// 存入moveY （Y轴的偏移距离）
					this.moveY = Math.abs( newTouces.pageY - oldTouces.pageY )
				}
			}else if (this.TouchMoveType == 'leftLiangDu' && this.isTouchFull==true && dataY!=0) {
				
				
				// newTouchLiangduValue
				
				// 计算手指滑动的距离值 + 触摸开始时获取的系统亮度值
				this.newTouchLiangduValue = (oldTouces.pageY - newTouces.pageY) + this.oldValue.LiangduValue
				// 亮度进度条满值 = 100
				this.newTouchLiangduValue = this.newTouchLiangduValue > 100? 100 : this.newTouchLiangduValue
				this.newTouchLiangduValue = this.newTouchLiangduValue < 0? 0 : this.newTouchLiangduValue
				// 相等时重置oldTouces
				if(this.newTouchLiangduValue==this.oldValue.LiangduValue) this.oldTouces = newTouces
				
				console.log('计算后的系统亮度值 == ' + parseInt(this.newTouchLiangduValue))
				console.log('当前系统的亮度值 == ' + this.SliderLiangduValue)

				let oldLiangDu = this.SliderLiangduValue //计算前的亮度值（也就是上一次计算后写入的亮度值）
				let newLiangDu = parseInt(this.newTouchLiangduValue) // 计算后的亮度值，但是这时候还没写入到sliderliangduvalue
				
				console.log(oldLiangDu,newLiangDu)
				
				

				// 判断计算前和计算后的两数只差，如（10-2=8 2-10=-8）差=8|-8
				// 如果两数之差相差30|-30，则直接返回，不向下执行时间。因为这个操作通常是用户快速滑动屏幕造成的，或者是不下心造成的
				console.log('两数只差 == ' + Number(newLiangDu - oldLiangDu))
				let Difference = Math.abs(Number(newLiangDu - oldLiangDu))
				console.log('abs两数只差 == ' + Difference)
				
				if (Number(oldLiangDu - newLiangDu) < Number(-15)) {
					// 如 当前亮度值20 - 计算后的亮度值40 = -15 说明是加亮度操作+++++
					console.log('当前亮度 - 计算后的亮度 < -15 ; 操作为 -- 加亮度操作')
					if (Number(Difference) > Number(15) && Number(Difference) < Number(100)) {
						console.log('两数只差 > 15 ; 说明加亮度操作过快 ; 两数只差 == ' + Difference)
						// 阻止事件本身，不向下执行，不然会一下子加亮度加的很亮
						return false 
					}
				} else if ((oldLiangDu - newLiangDu) > Number(15)) {
					// 如果 当前亮度值100 - 计算后的亮度值65 = 35 说明是减亮度操作----
					console.log('当前亮度 - 计算后的亮度 > -15 ; 操作为 -- 减亮度操作')
					if (Number(Difference) > Number(15) && Number(Difference) < Number(100)) {
						console.log('两数只差 > 15 ; 说明减亮度操作过快 ; 两数只差 == ' + Difference)
						// 阻止事件本身，不向下执行，不然会一下子减亮度减的很暗
						return false 
					}
				}

				// 去除小数点后的所有数字
				this.SliderLiangduValue = parseInt(this.newTouchLiangduValue)
				// 执行更新系统亮度
				this.setTouchMove_LeftLiangDu()
				
				// 输出当前滑动的距离时多少亮度值
				//console.log('SliderLiangduValue == ' + this.SliderLiangduValue)
				
				//
			}else if (this.TouchMoveType == 'rightYingLiang' && this.isTouchFull==true && dataY!=0){
				
				
				//console.log('计算旧的值 - 新的值 === xxx')
				//console.log((oldTouces.pageY - newTouces.pageY))

				//console.log('计算新的值 - 旧的值 === xxx')
				//console.log((newTouces.pageY - oldTouces.pageY))
				
				// 【暂时不需要】
				// 判断是上滑还是下滑（上滑 >= 1）(下滑 <= -1)
				// if ((oldTouces.pageY - newTouces.pageY) >= dataY){
				// 	console.log('上滑')
				// 	// 旧的值 - 新的值 >= 1  // 上滑 ++++ （采用旧的值 - 新的值）
				// 	this.newTouchYingliangValue = (oldTouces.pageY - newTouces.pageY) + this.oldValue.YingLiangValue
					
				// }else 
				// if ((oldTouces.pageY - newTouces.pageY) <= dataY){
				// 	console.log('下滑')
				// 	// 旧的值 - 新的值 <= -1 // 下滑 --- （采用新的值 - 旧的值）
				// 	this.newTouchYingliangValue = (100 - Math.abs(newTouces.pageY  - oldTouces.pageY)) - this.oldValue.YingLiangValue
				// }
				
				// 计算手指滑动的距离值 + 触摸开始时获取的系统音量值
				this.newTouchYingliangValue = (oldTouces.pageY - newTouces.pageY) + this.oldValue.YingLiangValue
				
				// 音量进度条满值 = 100
				this.newTouchYingliangValue = this.newTouchYingliangValue > 100? 100 : this.newTouchYingliangValue
				this.newTouchYingliangValue = this.newTouchYingliangValue < 0? 0 : this.newTouchYingliangValue
				// 相等时重置oldTouces
				if(this.newTouchYingliangValue==this.oldValue.YingLiangValue) this.oldTouces = newTouces
				// 去除小数点后的所有数字
				this.SliderYingliangValue = parseInt(this.newTouchYingliangValue)
				// 执行更新系统音量
				this.setTouchMove_RightYingLiang()
				// 输出当前滑动的距离时多少音量值
				//console.log('SliderYingliangValue == ' + this.SliderYingliangValue)
				
				
			}else if (this.TouchMoveType == 'conterVideoJinDu'){

				
				/* 
					* @ 左滑减视频进度，右滑加视频进度
					* @ 正在左右滑动的时候，不允许同步更新视频进度
					* @ 需要在触摸结束后再更新视频进度,才不会影响体验 
				*/ 

				// X轴左右滑动/视频进度调节
				
				//console.log('touchCurrent == ' + this.newTouchCurrentTime)
				//console.log('this.oldValue.currentTime*1 == ' + this.oldValue.currentTime*1)
				//console.log('this.timeUpdate[0].duration == ' + this.timeUpdate[0].duration)
				//console.log('100/this.timeUpdate[0].duration == ' + 100/this.timeUpdate[0].duration + this.oldValue.currentTime*1)
				
				// 计算每一秒是进度条n值，因为进度条满值是100，总时间/100=进度条1值=n秒，然后100/总时间=n秒等于进度条n值
				//this.newTouchCurrentTime = (newTouces.pageX - oldTouces.pageX) + (100/this.timeUpdate[0].duration + this.oldValue.currentTime*1)
				// 先减掉X轴的偏移(>20)this.moveX距离，因为不减去，会吧这个(>20)this.moveX也算进去，那么当刚进入视频进度调节手势是，显示的预览时间也是不对的，因为多了(>20)this.moveX距离的计算
				this.newTouchCurrentTime = Number(newTouces.pageX - oldTouces.pageX) + (100/this.timeUpdate[0].duration + this.oldValue.currentTime*1)
				
				this.newTouchCurrentTime = this.newTouchCurrentTime >= this.timeUpdate[0].duration? this.timeUpdate[0].duration : this.newTouchCurrentTime
				
				this.newTouchCurrentTime = this.newTouchCurrentTime <= 0? 0 : this.newTouchCurrentTime
				

				console.log('触摸移动时长：' + this.newTouchCurrentTime , '当前时长：' + this.timeUpdate[0].currentTime , '总时长：' + this.timeUpdate[0].duration)

				// 相等时重置oldTouces (保留后6位小数，和官方进度回调，小数位数保持一致)
				if (this.newTouchCurrentTime == this.timeUpdate[0].currentTime) this.oldTouces = newTouces
				
				
				// 用来拦截进度条拖滑和触摸改变进度时两个事件同时触发
				if (this.changingSliderX==false){
					// 只有进度条没有拖动时，才触发下面的事件，避开触摸和进度条拖动
					
					// 拖拽过程中，显示视频进度面板
					// 触摸中间或触摸左边或右边并且是左右移动时，设置视频进度
					this.setTouchMove_conterVideoJinDu()
				}else {
					//console.log("进度条在拖动，不执行触摸改变进度")
				}
			}else if (this.TouchMoveType == 'VideoPlaybackRate'){
				// 长按快进中
			}

			// 将触摸移动回调出去
			let parms = {
				type: 'touchmove',
				event,// 触摸参数
				TouchMoveType: this.TouchMoveType,// 手指滑动类型
				Value: {
					Liangdu: this.SliderLiangduValue,// 计算后的亮度值
					Yingliang: this.SliderYingliangValue,// 计算后的音量值
					CurrentTime: this.newTouchCurrentTime,// 计算后的视频进度值
				},
				msg: {
					type: 'touchmove == 触摸移动',
					event: '触摸参数',
					TouchMoveType: '手指移动类型',
					TouchMoveType_msg: {
						leftLiangDu: this.TouchMoveType == 'leftLiangDu' ? '当前为Y轴左边亮度调节手势' : false,
						rightYingLiang: this.TouchMoveType == 'rightYingLiang' ? '当前为Y轴右边音量调节手势' : false,
						conterVideoJinDu: this.TouchMoveType == 'conterVideoJinDu' ? '当前为X轴移动视频进度调节手势' : false,
						VideoPlaybackRate: this.TouchMoveType == 'VideoPlaybackRate' ? '当前为长按视频快进调节手势' : false,
					},
					Value: {
						Liangdu: '计算后的亮度值',
						Yingliang: '计算后的音量值',
						CurrentTime: '计算后的视频进度值'
					}
				}
			}
			this.$emit('changeTouch',parms)
		},
		//@touchend触摸结束(手指离开后)
		onTouchEnd(event) {
			//console.log("触摸结束")

			// isopenDrawerItem = true 已禁用【手指触摸事件】
			// 判断抽屉面板下的Item面板是否是开启状态，是的话，就要禁用手指触摸事件
			if (this.isopenDrawerItem == true) return false // 直接返回，阻止事件本身

			// 关闭触摸时显示的面板
			this.isTouchFull = false
			// 关闭防抖
			//this.isfangdou = false
			//console.log("触摸结束")
			
			// 触摸结束的时候，判断触摸开始的类型是否为右边音量调节
			// 是的话，就设置音量，因为音量不能实时同步调节，会卡顿，HX的bug
			if (this.TouchMoveType == 'rightYingLiang') {
				// 2022-0124 以下注释代码暂已废弃
				/* // 设置音量
				var YingLiang = (this.SliderYingliangValue/100)
				//console.log('YingLiang')
				//console.log(YingLiang)
				// 设置音量进度条
				if (YingLiang>=1){
					YingLiang = 1 //音量值范围0~1
					this.SliderYingliangValue = 100 //音量进度条的值
				}else if (YingLiang<=0){
					YingLiang = 0 //音量值范围0~1
					this.SliderYingliangValue = 0 //音量进度条的值
				}
				// 定义入口参数
				let options = {value:YingLiang}
				// 设置系统音量值
				if (this.DataY!=0){
					this.setDeviceVolume(options)
				}else {
					// 如果触摸后立即离开，则Data的值=0，
					// 所以可以判定只是单击
				} */

				// 
				this.isTouchFull_Yingliang=false//关闭调节音量面板
				//
			}else if(this.TouchMoveType == 'leftLiangDu'){
				this.isTouchFull_Liangdu=false//关闭调节亮度面板
				//
			}else if(this.TouchMoveType == 'conterVideoJinDu'){
				
				// （已更改>>后面提示的用不到了）只有进度条没有拖动时，才触发下面的事件，避开触摸和进度条拖动同时触发
				
				// 触摸移动结束后，更新视频进度
				this.setTouchEnd_conterVideoJinDu()
				//
			}else if (!this.TouchMoveType){
				// 判断单击/双击(双击则播放/暂停)
				this.clickTapCi()
			}
			// 重置触摸手势(只能放最后)
			//this.TouchMoveType = null
			// 手释放，如果在500毫秒内就释放，则取消长按事件，此时可以执行onclick应该执行的事件
			this.gTouchendCancelVideoPlaybackRate()

			//清除定时器
			clearTimeout(onTouchTimeout)
			// 重置为0
			this.Touchend_time = 0

			// 将触摸移动回调出去
			let parms = {
				type: 'touchend',
				event,// 触摸参数
				TouchMoveType: this.TouchMoveType,// 手指滑动类型
				Value: {
					Liangdu: this.SliderLiangduValue,// 计算后的亮度值
					Yingliang: this.SliderYingliangValue,// 计算后的音量值
					CurrentTime: this.newTouchCurrentTime,// 计算后的视频进度值
				},
				clickCi: this.clickCi,// 单击或双击及以上
				msg: {
					type: 'touchend == 触摸结束',
					event: '触摸参数',
					TouchMoveType: '手指移动类型',
					TouchMoveType_msg: {
						leftLiangDu: this.TouchMoveType == 'leftLiangDu' ? '当前为Y轴左边亮度调节手势' : false,
						rightYingLiang: this.TouchMoveType == 'rightYingLiang' ? '当前为Y轴右边音量调节手势' : false,
						conterVideoJinDu: this.TouchMoveType == 'conterVideoJinDu' ? '当前为X轴移动视频进度调节手势' : false,
						VideoPlaybackRate: this.TouchMoveType == 'VideoPlaybackRate' ? '当前为长按视频快进调节手势' : false,
					},
					Value: {
						Liangdu: '计算后的亮度值',
						Yingliang: '计算后的音量值',
						CurrentTime: '计算后的视频进度值'
					},
					clickCi: '0 = 移动手势；1 = 单击手势；2 = 双击手势；>2 多次点击手势'
				}
			}
			this.$emit('changeTouch',parms)

			// 重置触摸手势(只能放最后)
			this.TouchMoveType = null
		},
		// 判断在锁屏模式下是否开启手指触摸手势
		is_goSuoPing_touch_gesture() {
			// 3.5.1 版本新增 2022-0316
			// 在锁屏模式下是否开启手指触摸手势（即是否开启控制进度、亮度、音量的调节手势）
			// false = 锁屏模式下关闭了控制调节手势 || true = 锁屏模式下开启了控制调节手势
			// if (this.Config.goSuoPing_touch_gesture == false) return false
			if (this.isSuoPing == true && this.Config.goSuoPing_touch_gesture == false) {
				return true
			}else {
				return false
			}
		},

		// 触摸左边并且是上下移动时，设置亮度
		setTouchMove_LeftLiangDu(){
			/* 2022-0124 新增功能
			 * 3.3.6版本 是否开启亮度与音量调节手势
			 */

			// 判断在非全屏模式下，是否开启亮度与音量调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == false && this.Config.extFull_vslide_gesture == false) return false
			
			// 判断非全屏模式下，是否开启亮度与音量调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == true && this.Config.goFull_vslide_gesture == false) return false
			
			// 打开调节亮度面板
			this.isTouchFull_Liangdu = true
			// 关闭调节音量面板
			this.isTouchFull_Yingliang = false
			// 关闭调节视频进度面板
			this.ischangingSliderTime = false
			// (Y轴)左边/亮度调节

			// 设置亮度
			var Liangdu = this.SliderLiangduValue/100
			//console.log('亮度值 == ' + Liangdu)
			if (Liangdu>=1){
				Liangdu = 1 //亮度值范围0~1
				this.SliderLiangduValue = 100 //亮度进度条的值
			}else if (Liangdu<=0){
				Liangdu = 0 //亮度值范围0~1
				this.SliderLiangduValue = 0 //亮度进度条的值
			}
			// 定义入口参数
			let options = {value:Liangdu}
			// 设置屏幕亮度值
			this.setScreenLiangdu(options)
		},
		// 触摸右边并且是上下移动时，设置音量
		setTouchMove_RightYingLiang(){
			/* 2022-0124 新增功能
			 * 3.3.6版本 是否开启亮度与音量调节手势
			 */

			// 判断在非全屏模式下，是否开启亮度与音量调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == false && this.Config.extFull_vslide_gesture == false) return false
			
			// 判断非全屏模式下，是否开启亮度与音量调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == true && this.Config.goFull_vslide_gesture == false) return false

			// 打开调节音量面板
			this.isTouchFull_Yingliang = true
			// 关闭调节亮度面板
			this.isTouchFull_Liangdu = false
			// 关闭调节视频进度面板
			this.ischangingSliderTime = false
			// (Y轴)右边/音量调节

			// 设置音量
			var YingLiang = Math.abs(this.SliderYingliangValue/100)
			// 定义入口参数
			let options = {value:YingLiang}
			// 设置系统音量值
			if (this.DataY!=0){
				// 只在Android平台 （安卓和苹果 机制不一样，苹果会自动使用系统的音量）
				if (this.platform_mobile == 'android'){
					// 节流，在一定时间内，只能触发一次（不然系统音量会执行很多次，频率太高要不得）
					throttle(()=>{
						// 执行更新音量
						this.setDeviceVolume(options)
					},50)
				}
			}else {
				// 如果触摸后立即离开，则Data的值=0，
				// 所以可以判定只是单击
			}
			
		},
		// 触摸中间并且是左右移动时，设置视频进度
		setTouchMove_conterVideoJinDu(){
			// 如果是直播源，则阻止事件本身
			if (this.islive_player == true) return false
			
			// 判断在非全屏模式下，是否开启视频进度调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == false && this.Config.extFull_progress_gesture == false) return false
			
			// 判断全屏模式下，是否开启视频进度调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == true && this.Config.goFull_progress_gesture == false) return false
			
			
			// 拖拽过程中，显示视频进度面板
			this.ischangingSliderTime = true
			// 关闭调节亮度面板
			this.isTouchFull_Liangdu = false
			// 关闭调节音量面板
			this.isTouchFull_Yingliang = false
			// 入口参数
			let event = {
				duration: this.timeUpdate[0].duration,
				second: this.newTouchCurrentTime 
			}
			// 更新视频进度时间
			this.UpdateTime(event);//ps=> plus-api/slider-video.js
			// 更新视频进度条的值
			this.updateChangingSliderValue()
		},
		// 更新触摸时移动时显示的视频进度面板专属的滑动预览进度条的值
		updateChangingSliderValue(){
			// 计算手指触摸时显示的预览视频进度条的值（满值=100）
			// 获取总时长
			var v_duration = this.timeUpdate[0].duration
			// 计算进度条的1值等于多少时长 （总时长/100）, 如总时长600/100 = 进度条每1值 = 6
			var v_SliderValue = v_duration / 100
			// 计算当前时长等于多少进度条的值 （当前时长/进度条每1值）如当前时长400/6 = 66.66666666666667，然后总时长600 乘 66.66.....7 正好等于400
			var v_second = this.newTouchCurrentTime / v_SliderValue
			// 设置进度条的值
			this.timeUpdate[0].changingSliderValue = v_second
		},
		// 触摸移动结束时，设置视频进度
		setTouchEnd_conterVideoJinDu(){
			// 如果是直播源，则阻止事件本身
			if (this.islive_player == true) return false
			
			// 判断在非全屏模式下，是否开启视频进度调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == false && this.Config.extFull_progress_gesture == false) return false
			
			// 判断全屏模式下，是否开启视频进度调节手势，如果是false，则阻止事件本身
			if (this.isFullScreenChange == true && this.Config.goFull_progress_gesture == false) return false
			
			// 获取触摸结束后的当前时长，并去除小数点后的数字
			let current = parseInt(this.newTouchCurrentTime)
			// console.log('current == ' + current)
			// 完成拖动后，计算对应时间并跳转到指定位置
			this.videoContext.seek(current) // 跳转到指定时间
			// 完成拖动后，关闭调节视频进度条面板
			this.ischangingSliderTime = false
			/* 3.5.1 版本新增代码与修复bug 2022-0327
			 * bug反馈为：视频暂停播放时，手势拖动进度条，加载中提示不会消失，加载好了也不消失，点击播放按钮才会消失
			 */
			// 判断当前是否处于暂停播放状态，如果是，则在手势完成一次拖动完毕后自动继续播放。
			if (this.isPlay == false){
				// 继续播放
				this.play()
			}
		},
		// 防抖 
		fangdou(){
			let fangdou = this.isfangdou
			// 只要触摸移动就清除状态
			clearTimeout(timer)
			// 告知标识 -> 正在触摸移动
			if (fangdou) {
				// 延时100毫秒后开始防抖
				setTimeout(()=>{
					// 防抖标识
					this.isfangdou = false
				},100)
			}else {
				console.log("防抖中--正在执行高频事件")
			}
			timer = setTimeout(()=>{
				//console.log('防抖结束')
				this.isfangdou = true
			},200)
		},
		
		// 判断单击和双击
		clickTapCi() {
			//300毫秒内，如果大于等于2次点击就是双击
			this.clickCi++
			setTimeout(() => {
				if (this.clickCi == 1) {
					//console.log('单击')
					// 
				}
				if (this.clickCi == 2) {
					//console.log('双击')
					this.enable_play_gesture()
					//
				}
				if (this.clickCi >= 2){
					// @1. 只要快速点击次数大于2，并且show=true
					// @2. 就隐藏控制面板，此时show=false
					// @3. 这样当用户手指离开一段时间后
					// @4. 他下次点击就是单击事件，执行动画就显示控制面板了
					if (this.show==true) {
						//console.log('双击及以上')
						// 执行动画并隐藏控制面板
						this.isShowCommFullScreen()
					}
					//
				}
				this.clickCi = 0
			},300)
		},
		// 播放手势，即双击切换播放/暂停
		enable_play_gesture(){

			// 判断是否开启播放手势，即双击切换播放/暂停，如果是false，则阻止事件本身
			if (this.Config.enable_play_gesture == false) return false

			// 如果是视频出错时，则返回，不继续向下不执行
			if (this.isError == true) return

			var VideoPlayer = this.isPlay
			if (VideoPlayer == true) {
				//暂停视频
				this.pause()
			} else if (VideoPlayer == false) {
				//播放视频
				this.play()
			}
		},
		// @1.[触摸开始] 如果手指按下并且没有移动在500毫秒内又是长按，则设置“调节长按视频快进”
		gTouchStartSetVideoPlaybackRate(){
			// 3.5.1 版本新增 2022-0316
			// 在锁屏模式下是否开启手指触摸手势（即是否开启控制进度、亮度、音量的调节手势）
			// 如果是关闭了控制调节手势，则返回，不继续向下执行
			if (this.is_goSuoPing_touch_gesture()) return
			// 如果是视频出错时，则返回，不继续向下不执行
			if (this.isError == true) return
			// 
			this.timeOutEvent = setTimeout(()=>{
				this.timeOutEvent = 0
				// 真正长按后应该执行的内容　　
				//console.log("长按事件触发发")
				// 必须在视频进入播放器状态才有效，不然有bug，播放视频是2.0倍速但是倍速里没有索引项
				if (this.isPlay==true&&this.timeUpdate[0].currentTime>=1) {
					
					// 判断在非全屏模式下，是否开启长按视频快进手势（2.0倍速快进中），如果是false，则阻止事件本身
					if (this.isFullScreenChange == false && this.Config.extFull_PlaybackRate_gesture == false) return false
			
					// 判断在全屏模式下，是否开启长按视频快进手势（2.0倍速快进中），如果是false，则阻止事件本身
					if (this.isFullScreenChange == true && this.Config.goFull_PlaybackRate_gesture == false) return false
			

					// 视频快进控制 (如果手指按下在300毫秒内没有移动，则设置为“调节视频快进”)
					this.TouchMoveType = 'VideoPlaybackRate'//手指类型
					// 获取用户设置的倍数并记录，手释放后再恢复用户的倍数
					this.getVideoPlaybackRate()
					// 执行“调节长按视频快进”
					this.playbackRate(2.0,6)//1.倍速，2.索引
					// 打开触摸时显示的面板
					this.isTouchFull = true
					// 打开“长按视频快进”面板
					this.isTouchFull_PlaybackRate = true
					// 关闭对应的控制面板
					this.closeSwitchControl()
				}
			},500);// 这里设置定时器，定义长按500毫秒触发长按事件，时间可以自己改，个人感觉500毫秒非常合适
			return false;
		},
		// @2.[触摸移动] 如果手指有移动，则取消所有事件，此时说明用户只是要移动而不是长按
		gTouchMoveCancelVideoPlaybackRate(){
			clearTimeout(this.timeOutEvent)//清除定时器
			this.timeOutEvent = 0
			//console.log("取消了")
			
			// 重制手指类型(1.不能重制，因为重制的话，一直获取不到手指移动类型是音量还是亮度等)
			//this.TouchMoveType = null
			// 2.此时就算手指移动，类型也是"VideoPlaybackRate"，不影响“长按调节视频快进”
			
			// 如果手指有移动并且timeOutEvent==0则关闭对应的控制面板
			if (this.timeOutEvent==0){
				// 关闭对应的控制面板
				this.closeSwitchControl()
			}
		
		},
		//@3.[触摸结束] 手释放，如果在500毫秒内就释放，则取消长按事件，此时可以执行onclick应该执行的事件
		gTouchendCancelVideoPlaybackRate(){
			clearTimeout(this.timeOutEvent);//清除定时器
			if (this.timeOutEvent!=0){
				// 这里写要执行的内容（尤如onclick事件）
				//console.log("你这是点击，不是长按");
				// 执行控制面板动画（打开/关闭）
				this.isShowCommFullScreen()
			}else {
				let Rate = this.UserBeiSu
				//console.log('Rate=='+Rate)
				// 恢复用户选择的倍数				
				this.playbackRate(this.upper_besuText,this.upper_besuIndex)//1.倍速文本，2.倍数索引
				// 重制手指类型已在手指离开事件里
				
				// 关闭触摸时显示的面板
				this.isTouchFull = false
				// 关闭“长按视频快进”面板
				this.isTouchFull_PlaybackRate = false
				
				// 打开对应的控制面板(1.不需要执行)
				//this.openSwitchControl()
				// 2.因为控制面板中间用了tap事件绑定的打开和关闭控制面板
				// 3.当手指按下再离开时，其实已经触发了打开和关闭控制面板的事件
				// 4.如果启用上面事件，会执行两次，就会有bug
			}
			return false;
		},
		// 关闭对应的控制面板(手指触摸时并且超过300毫秒)
		closeSwitchControl(){
			/* @1. 比如进入全屏后，退出全屏的控制面板就会被关闭，所以不需要再写判断 
			 * @2. 只需要判断show动画是否->是显示true状态，如果是->则执行动画并隐藏控制面板
			 */
			if (this.show==true){
				// 执行动画并隐藏控制面板
				this.isShowCommFullScreen()
			}
		},
		// 打开对应的控制面板(手指离开时)
		openSwitchControl(){
			/* @1. 比如进入全屏后，退出全屏的控制面板就会被关闭，所以不需要再写判断
			 * @2. 只需要判断show动画是否->是显示true状态，如果是->则执行动画并隐藏控制面板
			 */
			if (this.show==false){
				// 执行动画并隐藏控制面板
				this.isShowCommFullScreen()
			}
		},
		// 获取video的当前时长（视频的当前进度时间）
		getVideoCurrentTime(){
			// 手指触摸开始，按下时记录当前时长/当前视频进度时间
			this.oldValue.currentTime = this.timeUpdate[0].currentTime
		},
		/* 3.5.1 版本新增 2022-0324 */
		// 获取用户设置的倍数（用于长按快进结束后恢复用户上一次设置的倍数）
		getVideoPlaybackRate(){
			// 获取用户设置的倍数索引并存入到data中
			this.upper_besuIndex = this.besuIndex
			this.upper_besuText = this.besuText.split("X")[0]
			console.log('用户的倍数索引为 == ' + this.upper_besuIndex)
			console.log('用户的倍数为 == ' + this.upper_besuText)
		},
		/* 3.5.1 版本新增 */
		onTouchtime(time){
			onTouchTimeout = setTimeout(() => {
				this.Touchend_time = time || 100 // 默认100毫秒
			},time)
		}		
	}
}